package main

import (
	"log"
	"markedit/internal/database"
	"markedit/internal/handler"
	"markedit/pkg/utils"

	"github.com/gin-gonic/gin"
	"github.com/spf13/viper"
)

func main() {
	// 初始化配置
	if err := initConfig(); err != nil {
		log.Fatalf("初始化配置失败: %v", err)
	}

	// 初始化日志
	utils.InitLogger()

	// 初始化数据库
	if err := database.InitDatabase(); err != nil {
		log.Fatalf("数据库初始化失败: %v", err)
	}
	defer database.CloseDatabase()

	// 创建默认管理员账户
	if err := database.CreateDefaultAdmin(); err != nil {
		log.Printf("创建默认管理员失败: %v", err)
	}

	// 设置Gin模式
	gin.SetMode(viper.GetString("server.mode"))

	// 创建路由
	router := setupRouter()

	// 启动服务器
	port := viper.GetString("server.port")
	if port == "" {
		port = "8080"
	}

	log.Printf("服务器启动在端口: %s", port)
	if err := router.Run("127.0.0.1:" + port); err != nil {
		log.Fatalf("服务器启动失败: %v", err)
	}
}

func initConfig() error {
	viper.SetConfigName("config")
	viper.SetConfigType("yaml")
	viper.AddConfigPath("./config")
	viper.AddConfigPath(".")

	// 设置默认值
	viper.SetDefault("server.port", "8080")
	viper.SetDefault("server.mode", "debug")

	if err := viper.ReadInConfig(); err != nil {
		log.Printf("配置文件读取失败，使用默认配置: %v", err)
	}

	return nil
}

func setupRouter() *gin.Engine {
	router := gin.Default()

	// 静态文件服务
	router.Static("/static", "./web/static")
	router.LoadHTMLGlob("web/templates/*")

	// 注册路由
	handler.RegisterRoutes(router)

	return router
}